/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package muhnes.sizoo.validador;

import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;
 
public class RegexValidator implements Validator{
    
    @Override
    public void validate(FacesContext contexto, UIComponent componente, Object valor)
        throws ValidatorException {
        
        String opc = (String) componente.getAttributes().get("opcional");
        boolean opcional = opc != null && !opc.isEmpty() ? Boolean.parseBoolean(opc) : false;
        String cadena = (String) valor;
        String regex = (String) componente.getAttributes().get("regex");
        String formato = (String) componente.getAttributes().get("formato");
        
        if( (cadena == null || cadena.isEmpty()) && !opcional ) {
            FacesMessage mensaje = new FacesMessage();
            mensaje.setSeverity( FacesMessage.SEVERITY_ERROR );
            mensaje.setSummary( "El campo no puede ser nulo." );
            mensaje.setDetail( "El campo es obligatorio y debe contener un valor." );
            contexto.addMessage( componente.getClientId(), mensaje );
            throw new ValidatorException( mensaje );
        }
        else if( (regex != null && !regex.isEmpty() && !cadena.matches( regex )) && !opcional ) {
            FacesMessage mensaje = new FacesMessage();
            mensaje.setSeverity( FacesMessage.SEVERITY_ERROR );
            mensaje.setSummary( "El campo no tiene el formato adecuado." );
            mensaje.setDetail( "El valor debe tener el formato " + (formato != null && !formato.isEmpty() ? formato: "correspondiente al tipo del campo") );
            contexto.addMessage( componente.getClientId(), mensaje );
            throw new ValidatorException( mensaje );
            
        }
           else if ((cadena == null ||( !cadena.isEmpty() && regex != null && !regex.isEmpty() && !cadena.matches( regex ))) &&  opcional == true) {
                FacesMessage mensaje = new FacesMessage();
                mensaje.setSeverity( FacesMessage.SEVERITY_ERROR );
                mensaje.setSummary( "El campo no tiene el formato adecuado." );
                mensaje.setDetail( "El valor debe tener el formato " + (formato != null && !formato.isEmpty() ? formato: "correspondiente al tipo del campo") );
                contexto.addMessage( componente.getClientId(), mensaje );
                throw new ValidatorException( mensaje );
           }
        
    }  
}
